//需求分析：定义一个读取文件的函数，接受要读取文件路径，返回读取的结果 
const fs = require('fs')
const path = require('path')
// 封装原则：函数的处理结果，不应该在函数中私自决定处理结果，应该让调用者取决定，如何chuli
// function readFileByPath(path){
//     fs.readFile(path,'utf-8',(err,result) => {
//         if(err) throw err;
//         // console.log(result)
//         //异步函数中的return是队列执行，执行到return的时候，函数已经把undefined当做返回值返回了
//         return result
//     })
// }

function readFileByPath(fpath, callback) {
    fs.readFile(fpath, 'utf-8', (err, results) => {
        if (err) return callback(err);
        callback(null, results)
    })
}

// readFileByPath(path.join(__dirname, '/files/11.txt'), function (err, data) {
//     if (err) return console.log(err.message)
//     console.log(data)
// })

// 根据封装的函数一次读取文件1,2,3
readFileByPath(path.join(__dirname, '/files/1.txt'), (err, data1) => {
    console.log(data1)
    readFileByPath(path.join(__dirname, '/files/2.txt'), (err, data1) => {
        console.log(data1)
        readFileByPath(path.join(__dirname, '/files/3.txt'), (err, data1) => {
            console.log(data1)
        })
    })
})
// Promisehi专门在ES6中提出来的，用于解决异步函数的嵌套的问题（回调地狱）
// 在代码中使用Promise不会减少代码量